import xen.lowlevel.xc; xc = xen.lowlevel.xc.new()
+from xen.xend.server import relocate
import sxp
import XendRoot; xroot = XendRoot.instance()
import XendCheckpoint
# Need a cancel too?
# Don't forget to cancel restart for it.
dominfo = self.domain_lookup(id)
+
+ port = xroot.get_xend_relocation_port()
+ sock = relocate.setupRelocation(dst, port)
+
+ XendCheckpoint.save(self, sock.fileno(), dominfo)
return None
def domain_save(self, id, dst, progress=False):
['destination', 'str'],
['live', 'int'],
['resource', 'int']])
- info = fn(req.args, {'dom': self.dom.id})
- #req.setResponseCode(http.ACCEPTED)
- host = info.dst_host
- port = info.dst_port
- dom = info.dst_dom
- url = "http://%s:%d/xend/domain/%d" % (host, port, dom)
- req.setHeader("Location", url)
- print 'do_migrate> url=', url
- return url
+ return fn(req.args, {'dom': self.dom.id})
def op_pincpu(self, op, req):
fn = FormFn(self.xd.domain_pincpu,
+
+import socket
import sys
import StringIO
port = xroot.get_xend_relocation_port()
interface = xroot.get_xend_relocation_address()
reactor.listenTCP(port, factory, interface=interface)
+
+def setupRelocation(dst, port):
+ try:
+ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ sock.connect((dst, port))
+ except socket.error, err:
+ raise XendError("can't connect: %s" % err[1])
+
+ sock.send("receive\n")
+ print sock.recv(80)
+
+ return sock